MetaMask 架构分析

1. Google 登录 + 无种子短语的钱包架构

MetaMask 提供了「Seedless Onboarding」(无种子注册)模式——用户通过 Google 登录 + 密码即可创建钱包,无需手动保管助记词(SRP)。

关键事实:SRP(种子短语)仍然存在,只是由系统自动生成并加密备份到 MetaMask 服务器,用户不可见。

1.1 核心组件

组件 (@metamask/*) 职责
seedless-onboarding-controller 编排整个 seedless 流程:认证 → 密钥派生 → 备份 → 恢复
social-controllers 处理 Google/Apple OAuth 社交登录
passkey-controller WebAuthn 通行密钥,用于设备级安全认证
authenticated-user-storage 存储用户数据到 MetaMask 服务器 (非 E2EE,但内容加密)
profile-sync-controller 跨设备同步加密数据,客户端加密后上传
delegation-controller EIP-712 签名委托记录管理

1.2 整体架构

diagram
图 1

1.3 创建钱包流程

diagram
图 2

1.4 多设备恢复(电脑 → 手机)

diagram
图 3

1.5 其他设备修改密码后的同步

diagram
图 4

2. 安全模型

2.1 密钥层次

用户密码 + TOPRF 分布式节点
        │
        ▼
  encKey (AES-256-GCM 加密密钥)
        │
        ├──▶ 加密 SRP → 上传 MetaMask 服务器 (密文)
        │
        └──▶ 加密本地 Vault (密文)

2.2 各方的能力边界

参与方 能做什么 不能做什么
MetaMask 服务器 存储加密 SRP blob(密文),OAuth 身份验证 解密 SRP(没有用户密码,且 TOPRF 密钥分散在阈值节点)
TOPRF 阈值节点 参与密钥派生计算(OPRF 协议) 单节点无法还原密钥(需要阈值数量的节点协作)
Google 提供 OAuth idToken 验证用户身份 与密钥完全无关
用户 持有密码 + Google 账号,两个因子缺一不可 也是唯一能解密 SRP 的人

2.3 安全依赖

因素 作用
Google 账号 (OAuth) 认证层——确认"你是谁",获取访问加密 blob 的权限
用户密码 加密层——派生密钥材料,没有它无法解密 SRP
TOPRF 阈值 (MPC) 分布式密钥派生,降低单点风险

3. 与传统注册模式对比

传统模式(助记词) Seedless 模式(Google + 密码)
SRP 是否存在 是,用户手动记录保管 是,系统自动生成,用户无感知
SRP 存储位置 仅本地 Vault(加密) 本地 Vault(加密) + 服务器备份(加密)
跨设备同步 手动输入助记词导入 Google 登录 → 自动解密恢复
丢失风险 丢助记词 = 丢资产 丢 Google 号 或 丢密码 = 丢资产
服务器可见内容 无 加密后的密文 blob(不可读)
服务器安全性 不依赖 依赖 MetaMask 服务器可用性,但不依赖其保密性

4. 关键源码

组件 路径
SeedlessOnboardingController @metamask/seedless-onboarding-controller/src/SeedlessOnboardingController.ts
TOPRF 安全备份 @metamask/toprf-secure-backup
Authenticated User Storage @metamask/authenticated-user-storage
Profile Sync Controller @metamask/profile-sync-controller
Social Controllers @metamask/social-controllers
Passkey Controller @metamask/passkey-controller
仓库 MetaMask/core